home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / DTDFactory.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  18.9 KB  |  733 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.util.Debug;
  4. import com.extensibility.util.FilteredEnumerator;
  5. import com.extensibility.util.StringUtilities;
  6. import com.extensibility.xml.dt.DataTypeFactory;
  7. import java.io.IOException;
  8. import java.util.Enumeration;
  9. import java.util.Hashtable;
  10. import java.util.Stack;
  11. import java.util.Vector;
  12.  
  13. public class DTDFactory implements DTDParserFactoryIntf {
  14.    public static final String REENTRANT_PE_NAME_PREFIX = "pe.";
  15.    static final String DATA_TYPE_SUFFIX = "_dt";
  16.    static final String ATTR_DATA_TYPE_SUFFIX = "_dt";
  17.    static final String ELEM_DATA_TYPE_SUFFIX = "__dt";
  18.    static final int ELEM_EXTRA_CHARS = "__dt".length() - "_dt".length();
  19.    static final int ATTR_EXTRA_CHARS = "_dt".length() - "_dt".length();
  20.    protected boolean alwaysThrowErrors = false;
  21.    BaseDeclaration lastCommentedDecl;
  22.    Stack conditionals = new Stack();
  23.    Vector commentQueue;
  24.    ContentModelTerm currentModelTerm;
  25.    ContentModelTerm lastModel;
  26.    Stack cmStack;
  27.    int insertPosition;
  28.    Schema dtd;
  29.    boolean insideIgnore = false;
  30.    boolean splitPending;
  31.  
  32.    public DTDFactory(Schema var1) {
  33.       this.dtd = var1;
  34.       this.commentQueue = new Vector();
  35.       this.cmStack = new Stack();
  36.       this.resetInsertPosition();
  37.       this.splitPending = var1.getCount() == 0;
  38.    }
  39.  
  40.    public void resetInsertPosition() {
  41.       this.insertPosition = 2147483646;
  42.    }
  43.  
  44.    public void setInsertPosition(int var1) {
  45.       this.insertPosition = var1;
  46.    }
  47.  
  48.    public int getInsertPosition() {
  49.       return this.insertPosition;
  50.    }
  51.  
  52.    public void createConditionalOpen(String var1, String var2, URI var3) {
  53.       boolean var4 = var1.equals("INCLUDE");
  54.       boolean var5 = this.insideIgnore;
  55.       this.insideIgnore = this.insideIgnore || !var4;
  56.       this.conditionals.push(new Boolean(var4));
  57.       this.conditionals.push(var2);
  58.       if (!var5) {
  59.          MarkedSectionOpen var6 = new MarkedSectionOpen(var1, var2);
  60.          this.setQComments(var6);
  61.          ((BaseDeclaration)var6).setURI(var3);
  62.          this.insertPosition = this.dtd.insertDeclaration(var6, this.insertPosition);
  63.       }
  64.    }
  65.  
  66.    public void createConditionalClose(URI var1, String var2) {
  67.       this.conditionals.pop();
  68.       this.conditionals.pop();
  69.       this.insideIgnore = false;
  70.  
  71.       for(int var3 = 0; !this.insideIgnore && var3 < this.conditionals.size(); var3 += 2) {
  72.          if (!(Boolean)this.conditionals.elementAt(var3)) {
  73.             this.insideIgnore = true;
  74.          }
  75.       }
  76.  
  77.       if (!this.insideIgnore) {
  78.          MarkedSectionClose var4 = new MarkedSectionClose(var2);
  79.          this.setQComments(var4);
  80.          ((BaseDeclaration)var4).setURI(var1);
  81.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  82.       }
  83.  
  84.    }
  85.  
  86.    public void createError(ParserException var1) {
  87.       if (!this.insideIgnore) {
  88.          this.dtd.addError(var1);
  89.       }
  90.    }
  91.  
  92.    private Vector[] splitVector(Vector var1) {
  93.       Vector[] var2 = new Vector[]{new Vector(), new Vector()};
  94.  
  95.       int var3;
  96.       for(var3 = 0; var3 < var1.size() && ((Comment)var1.elementAt(var3)).getComment().length() != 0; ++var3) {
  97.          var2[0].addElement(var1.elementAt(var3));
  98.       }
  99.  
  100.       for(int var4 = var3 + 1; var4 < var1.size(); ++var4) {
  101.          var2[1].addElement(var1.elementAt(var4));
  102.       }
  103.  
  104.       return var2;
  105.    }
  106.  
  107.    private boolean isCommentSplitPending() {
  108.       return this.splitPending;
  109.    }
  110.  
  111.    private void setCommentSplitPending(boolean var1) {
  112.       this.splitPending = var1;
  113.    }
  114.  
  115.    void setQComments(BaseDeclaration var1) {
  116.       if (!this.insideIgnore) {
  117.          if (this.isCommentSplitPending()) {
  118.             Vector[] var2 = this.splitVector(this.commentQueue);
  119.             this.dtd.setComments(this.dtd.getStructure().getSystemURI(), var2[0]);
  120.             this.commentQueue = var2[1];
  121.             this.setCommentSplitPending(false);
  122.          }
  123.  
  124.          var1.setComments(this.commentQueue);
  125.          this.commentQueue = new Vector();
  126.          this.lastCommentedDecl = var1;
  127.       }
  128.    }
  129.  
  130.    public void createCMOpen() {
  131.       if (!this.insideIgnore) {
  132.          this.cmStack.push(this.currentModelTerm);
  133.          this.currentModelTerm = new ContentModelTerm();
  134.       }
  135.    }
  136.  
  137.    public void createCMClose(int[] var1, char var2) {
  138.       if (!this.insideIgnore) {
  139.          this.currentModelTerm.setConnection(var2);
  140.          this.currentModelTerm.setOccurance(var1[0], var1[1]);
  141.          this.lastModel = this.currentModelTerm;
  142.          this.currentModelTerm = (ContentModelTerm)this.cmStack.pop();
  143.          if (this.lastModel != this.currentModelTerm) {
  144.             this.currentModelTerm.addTerm(this.lastModel);
  145.          }
  146.  
  147.       }
  148.    }
  149.  
  150.    public void createCMTerm(String var1, int[] var2, char var3) {
  151.       if (!this.insideIgnore) {
  152.          int var4 = var1.indexOf(ContentModelTerm.TAG_TYPE_SEPARATOR);
  153.          if (var1.equals("#PCDATA")) {
  154.             if (this.currentModelTerm.getLeafCount() > 0) {
  155.                this.createError(new ParserException(266, ""));
  156.             } else if (this.cmStack.size() > 1) {
  157.                this.createError(new ParserException(270, ""));
  158.             } else {
  159.                this.currentModelTerm.addTerm(new ContentModelTerm(1));
  160.             }
  161.          } else if (var4 >= 0) {
  162.             String var5 = var1.substring(0, var4);
  163.             var1 = var1.substring(var4 + 1);
  164.             ContentModelTerm var6 = new ContentModelTerm(new TypeRef(var1), var2[0], var2[1], var3);
  165.             var6.setLocalTag(var5);
  166.             this.currentModelTerm.addTerm(var6);
  167.          } else {
  168.             this.currentModelTerm.addTerm(new ContentModelTerm(new TypeRef(var1), var2[0], var2[1], var3));
  169.          }
  170.  
  171.       }
  172.    }
  173.  
  174.    public void createCMTerm(int var1) {
  175.       if (!this.insideIgnore) {
  176.          this.currentModelTerm.addTerm(new ContentModelTerm(var1));
  177.       }
  178.    }
  179.  
  180.    public void cloneAttrDecl(String var1, String var2, String var3) {
  181.       if (!this.insideIgnore) {
  182.          Object var4 = this.dtd.getNamedElement(var2);
  183.          if (var4 == null) {
  184.             Debug.trace(String.valueOf("Element not found while cloning attribute: ").concat(String.valueOf(var2)));
  185.             var4 = this.dtd.createUnknownOwner(var2);
  186.          }
  187.  
  188.          ElementDeclaration var5 = this.dtd.getNamedElement(var3);
  189.          AttributeDeclaration var7 = null;
  190.          Enumeration var8 = ((AttributeDeclaration.Owner)var4).getOwnedAttributes();
  191.  
  192.          while(var8.hasMoreElements()) {
  193.             AttributeDeclaration var6 = (AttributeDeclaration)var8.nextElement();
  194.             if (((BaseDeclaration)var6).getName().equals(var1)) {
  195.                var7 = (AttributeDeclaration)var6.clone(var5);
  196.                break;
  197.             }
  198.          }
  199.  
  200.          Debug.assert(var7 != null, "attr not found");
  201.          this.insertPosition = this.dtd.insertDeclaration(var7, this.insertPosition);
  202.       }
  203.    }
  204.  
  205.    public void createAttrDecl(String var1, String var2, Object var3, Vector var4, boolean var5, String var6, URI var7) {
  206.       if (!this.insideIgnore) {
  207.          int var8 = 0;
  208.          if (var3 instanceof Integer) {
  209.             var8 = (Integer)var3;
  210.             Object var9 = this.dtd.getNamedElement(var1);
  211.             if (var9 == null) {
  212.                var9 = this.dtd.createUnknownOwner(var1);
  213.             }
  214.  
  215.             AttributeDeclaration var10 = new AttributeDeclaration((AttributeDeclaration.Owner)var9, var2, DataTypeFactory.createDataType(var8), var4, var5, var6);
  216.             this.setQComments(var10);
  217.             ((BaseDeclaration)var10).setURI(var7);
  218.             this.insertPosition = this.dtd.insertDeclaration(var10, this.insertPosition);
  219.          } else {
  220.             Debug.assert(false, "peRef for enumeration not supported.");
  221.          }
  222.       }
  223.    }
  224.  
  225.    private boolean doAsDataType(AttributeDeclaration.Owner var1, String var2, Object var3, String var4) {
  226.       if (var4 == null) {
  227.          return false;
  228.       } else {
  229.          int var5 = 0;
  230.          if (var3 instanceof Integer) {
  231.             var5 = (Integer)var3;
  232.             int var6 = var2.indexOf("_dt");
  233.             if (var6 >= 0 && var2.substring(var6 - ELEM_EXTRA_CHARS).equals("__dt")) {
  234.                ((ElementDeclaration)var1).setDataType(DataTypeFactory.createDataType(var4));
  235.                return true;
  236.             } else {
  237.                if (var6 >= 0 && var2.substring(var6 - ATTR_EXTRA_CHARS).equals("_dt")) {
  238.                   String var14 = var2.substring(0, var2.length() - "_dt".length());
  239.                   AttributeDeclaration var15 = ((ElementDeclaration)var1).getAttribute(var14);
  240.                   if (var15 != null) {
  241.                      var15.setDataType(DataTypeFactory.createDataType(var4));
  242.                      return true;
  243.                   }
  244.  
  245.                   this.createError(new ParserException(237, var14));
  246.                } else if (var2.equals("e-dtype") && var5 == 7) {
  247.                   Debug.assert(var1 instanceof ElementDeclaration, String.valueOf("metadata poperty not owned by element: ").concat(String.valueOf(var1.getName())));
  248.                   ((ElementDeclaration)var1).setDataType(DataTypeFactory.createDataType(this.dtd.expandPERefs(var4, (BaseDeclaration)null)));
  249.                } else if (var2.equals("a-dtype") && var5 == 8) {
  250.                   Debug.assert(var1 instanceof ElementDeclaration, String.valueOf("metadata poperty not owned by element: ").concat(String.valueOf(var1.getName())));
  251.                   ElementDeclaration var7 = (ElementDeclaration)var1;
  252.                   Vector var8 = StringUtilities.parseNames(this.dtd.expandPERefs(var4, (BaseDeclaration)null));
  253.                   Debug.assert(var8.size() % 2 == 0, "odd number of pairs");
  254.                   int var9 = 0;
  255.  
  256.                   while(var9 < var8.size()) {
  257.                      String var10 = (String)var8.elementAt(var9++);
  258.                      String var11 = (String)var8.elementAt(var9++);
  259.                      AttributeDeclaration var12 = var7.getAttribute(var10);
  260.                      if (var12 != null) {
  261.                         var12.setDataType(DataTypeFactory.createDataType(var11));
  262.                      } else {
  263.                         this.createError(new ParserException(237, var10));
  264.                      }
  265.                   }
  266.  
  267.                   return true;
  268.                }
  269.  
  270.                return false;
  271.             }
  272.          } else {
  273.             return false;
  274.          }
  275.       }
  276.    }
  277.  
  278.    private String extractElementTypePropertyName(String var1) {
  279.       for(int var2 = 0; var2 < SchemaIntf.KNOWN_ELEM_META_PROP_ATTRS.length; ++var2) {
  280.          if (var1.equals(SchemaIntf.KNOWN_ELEM_META_PROP_ATTRS[var2])) {
  281.             return SchemaIntf.KNOWN_META_PROPS[var2];
  282.          }
  283.       }
  284.  
  285.       return null;
  286.    }
  287.  
  288.    private String extractAttributeTypePropertyName(String var1) {
  289.       for(int var2 = 0; var2 < SchemaIntf.KNOWN_ATTR_META_PROP_ATTRS.length; ++var2) {
  290.          if (var1.equals(SchemaIntf.KNOWN_ATTR_META_PROP_ATTRS[var2])) {
  291.             return SchemaIntf.KNOWN_META_PROPS[var2];
  292.          }
  293.       }
  294.  
  295.       return null;
  296.    }
  297.  
  298.    private boolean doAsMetaProp(AttributeDeclaration.Owner var1, String var2, Object var3, String var4) {
  299.       int var5 = 0;
  300.       if (var3 instanceof Integer) {
  301.          var5 = (Integer)var3;
  302.          if (var5 != 7 && var5 != 8 && var5 != 9) {
  303.             return false;
  304.          } else {
  305.             String var6 = this.extractElementTypePropertyName(var2);
  306.             if (var6 != null) {
  307.                Debug.assert(var1 instanceof ElementDeclaration, String.valueOf("metadata poperty not owned by element: ").concat(String.valueOf(var1.getName())));
  308.                ElementDeclaration var15 = (ElementDeclaration)var1;
  309.                ((BaseDeclaration)var15).putMetaProp(var6, var4);
  310.                return true;
  311.             } else {
  312.                var6 = this.extractAttributeTypePropertyName(var2);
  313.                if (var6 != null) {
  314.                   Debug.assert(var1 instanceof ElementDeclaration, String.valueOf("metadata poperty not owned by element: ").concat(String.valueOf(var1.getName())));
  315.                   ElementDeclaration var7 = (ElementDeclaration)var1;
  316.                   Vector var8 = StringUtilities.parseNames(var4);
  317.                   Debug.assert(var8.size() % 2 == 0, "odd number of pairs");
  318.                   int var9 = 0;
  319.  
  320.                   while(var9 < var8.size()) {
  321.                      String var10 = (String)var8.elementAt(var9++);
  322.                      String var11 = (String)var8.elementAt(var9++);
  323.                      AttributeDeclaration var12 = var7.getAttribute(var10);
  324.                      if (var12 != null) {
  325.                         ((BaseDeclaration)var12).putMetaProp(var6, var11);
  326.                      } else {
  327.                         this.createError(new ParserException(237, var10));
  328.                      }
  329.                   }
  330.  
  331.                   return true;
  332.                } else {
  333.                   return false;
  334.                }
  335.             }
  336.          }
  337.       } else {
  338.          return false;
  339.       }
  340.    }
  341.  
  342.    public void createAttrDecl(String var1, String var2, Object var3, boolean var4, String var5, URI var6) {
  343.       if (!this.insideIgnore) {
  344.          Object var7 = this.dtd.getNamedElement(var1);
  345.          boolean var8 = var7 != null;
  346.          if (!var8) {
  347.             var7 = this.dtd.createUnknownOwner(var1);
  348.          } else {
  349.             if (this.doAsDataType((AttributeDeclaration.Owner)var7, var2, var3, var5)) {
  350.                return;
  351.             }
  352.  
  353.             if (this.doAsMetaProp((AttributeDeclaration.Owner)var7, var2, var3, var5)) {
  354.                return;
  355.             }
  356.          }
  357.  
  358.          AttributeDeclaration var9 = new AttributeDeclaration((AttributeDeclaration.Owner)var7, var2, DataTypeFactory.createDataType(var3), var4, var5);
  359.          this.setQComments(var9);
  360.          ((BaseDeclaration)var9).setURI(var6);
  361.          this.insertPosition = this.dtd.insertDeclaration(var9, this.insertPosition);
  362.       }
  363.    }
  364.  
  365.    public void updateAttrDecl(String var1, String var2, Object var3, Vector var4, boolean var5, String var6) {
  366.       if (!this.insideIgnore) {
  367.          AttributeDeclaration var7 = this.dtd.getNamedAttribute(var1, var2);
  368.          var7.setDataType(DataTypeFactory.createDataType(var3));
  369.          if (var4 != null) {
  370.             var7.setChoices(var4, (Hashtable)null);
  371.          }
  372.  
  373.          var7.setRequired(var5);
  374.          if (var6 != null) {
  375.             var7.setDefault(var6);
  376.          }
  377.  
  378.       }
  379.    }
  380.  
  381.    public String getPE(boolean var1, String var2) {
  382.       ParameterEntityDeclaration var3 = this.dtd.getNamedParameterEntity(var2);
  383.       if (var1) {
  384.          return var3 == null ? null : ((EntityDeclaration)var3).getValue();
  385.       } else {
  386.          return var3 == null ? null : ((EntityDeclaration)var3).getSystemID().toSource();
  387.       }
  388.    }
  389.  
  390.    public void parseBegun(DTDParser var1) {
  391.       this.setCommentSplitPending(true);
  392.    }
  393.  
  394.    public void parseEnded(DTDParser var1) {
  395.    }
  396.  
  397.    public void cloneElementDecl(String var1, String var2) {
  398.       if (!this.insideIgnore) {
  399.          ElementDeclaration var3 = this.dtd.getNamedElement(var1);
  400.          Debug.assert(var3 != null);
  401.          ElementDeclaration var4 = (ElementDeclaration)var3.clone();
  402.          ((BaseDeclaration)var4).setName(var2);
  403.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  404.       }
  405.    }
  406.  
  407.    public void createElementDecl(String var1, URI var2) {
  408.       if (!this.insideIgnore) {
  409.          ElementDeclaration var3 = new ElementDeclaration(var1);
  410.          this.setQComments(var3);
  411.          ((BaseDeclaration)var3).setURI(var2);
  412.          this.currentModelTerm = var3.getContentModel();
  413.          this.currentModelTerm.updateModelTerm();
  414.          this.cmStack.setSize(0);
  415.          this.insertPosition = this.dtd.insertDeclaration(var3, this.insertPosition);
  416.       }
  417.    }
  418.  
  419.    public void createUnparsedEntityDecl(String var1, String var2, URI var3, String var4, URI var5) {
  420.       if (!this.insideIgnore) {
  421.          ExternalGEDeclaration var6 = new ExternalGEDeclaration(var1, var2, var3, var4);
  422.          this.setQComments(var6);
  423.          ((BaseDeclaration)var6).setURI(var5);
  424.          this.insertPosition = this.dtd.insertDeclaration(var6, this.insertPosition);
  425.       }
  426.    }
  427.  
  428.    public void createParamEntityDecl(String var1, String var2, URI var3, URI var4) {
  429.       if (!this.insideIgnore) {
  430.          ExternalPEDeclaration var5 = new ExternalPEDeclaration(var1, var2, var3);
  431.          this.setQComments(var5);
  432.          ((BaseDeclaration)var5).setURI(var4);
  433.          this.insertPosition = this.dtd.insertDeclaration(var5, this.insertPosition);
  434.       }
  435.    }
  436.  
  437.    public void createParamEntityDecl(String var1, String var2, URI var3) {
  438.       if (!this.insideIgnore) {
  439.          InternalPEDeclaration var4 = new InternalPEDeclaration(var1, var2);
  440.          this.setQComments(var4);
  441.          ((BaseDeclaration)var4).setURI(var3);
  442.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  443.          if (var2 != null && !var2.equals("")) {
  444.             var4.tryMakingReusable(this.dtd);
  445.          }
  446.  
  447.       }
  448.    }
  449.  
  450.    public void createGeneralEntityDecl(String var1, String var2, URI var3, URI var4) {
  451.       if (!this.insideIgnore) {
  452.          ExternalGEDeclaration var5 = new ExternalGEDeclaration(var1, var2, var3);
  453.          this.setQComments(var5);
  454.          ((BaseDeclaration)var5).setURI(var4);
  455.          this.insertPosition = this.dtd.insertDeclaration(var5, this.insertPosition);
  456.       }
  457.    }
  458.  
  459.    public void createGeneralEntityDecl(String var1, String var2, URI var3) {
  460.       if (!this.insideIgnore) {
  461.          InternalGEDeclaration var4 = new InternalGEDeclaration(var1, var2);
  462.          this.setQComments(var4);
  463.          ((BaseDeclaration)var4).setURI(var3);
  464.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  465.       }
  466.    }
  467.  
  468.    public void createPI(String var1, String var2, URI var3) {
  469.       if (!this.insideIgnore) {
  470.          ProcessingInstruction var4 = new ProcessingInstruction(var1, var2);
  471.          this.setQComments(var4);
  472.          ((BaseDeclaration)var4).setURI(var3);
  473.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  474.       }
  475.    }
  476.  
  477.    public void createNotationDecl(String var1, String var2, URI var3, URI var4) {
  478.       if (!this.insideIgnore) {
  479.          NotationDeclaration var5 = new NotationDeclaration(var1, var2, var3);
  480.          this.setQComments(var5);
  481.          ((BaseDeclaration)var5).setURI(var4);
  482.          this.insertPosition = this.dtd.insertDeclaration(var5, this.insertPosition);
  483.       }
  484.    }
  485.  
  486.    public void createComment(String var1) {
  487.       if (!this.insideIgnore) {
  488.          this.commentQueue.addElement(new Comment(var1));
  489.       }
  490.    }
  491.  
  492.    public void createComment(String var1, boolean var2) {
  493.       if (!this.insideIgnore) {
  494.          if (var2) {
  495.             this.createComment(var1);
  496.          } else if (this.lastCommentedDecl != null) {
  497.             this.lastCommentedDecl.addComment(new Comment(var1));
  498.          }
  499.  
  500.       }
  501.    }
  502.  
  503.    public void createExternalSubsetOpen(String var1, URI var2, URI var3) {
  504.       if (!this.insideIgnore) {
  505.          ExternalSubset var4 = new ExternalSubset(this.dtd.getStructure(), var1, var2, var3);
  506.          this.dtd.setStructure(var4);
  507.          this.setQComments(var4);
  508.          this.insertPosition = this.dtd.insertDeclaration(var4, this.insertPosition);
  509.          this.setCommentSplitPending(true);
  510.       }
  511.    }
  512.  
  513.    public void createExternalSubsetClose() {
  514.       if (!this.insideIgnore) {
  515.          this.dtd.setStructure((ExternalSubset)this.dtd.getStructure().getParent());
  516.       }
  517.    }
  518.  
  519.    public boolean createAttributeGroup(String var1, String var2) {
  520.       if (this.insideIgnore) {
  521.          return false;
  522.       } else {
  523.          ParameterEntityDeclaration var3 = this.dtd.getNamedParameterEntity(var1);
  524.          if (var3 != null && var3 instanceof InternalPEDeclaration) {
  525.             InternalPEDeclaration var4 = (InternalPEDeclaration)var3;
  526.             Object var5;
  527.             if (var2.indexOf("pe.") == 0) {
  528.                var5 = (InternalPEDeclaration)this.dtd.getNamedParameterEntity(var2.substring("pe.".length()));
  529.                Debug.assert(var5 != null, "owner not found.");
  530.             } else {
  531.                var5 = this.dtd.getNamedElement(var2);
  532.                if (var5 == null) {
  533.                   var5 = this.dtd.createUnknownOwner(var2);
  534.                }
  535.             }
  536.  
  537.             try {
  538.                boolean var6 = this.createAttributeGroup(var4, (AttributeDeclaration.Owner)var5, false);
  539.                return var6;
  540.             } catch (ParserException var8) {
  541.                if (!this.alwaysThrowErrors) {
  542.                   Debug.assert(false, "passing false into createAttributeGroup should have prevented this");
  543.                }
  544.  
  545.                boolean var7 = false;
  546.                return var7;
  547.             }
  548.          } else {
  549.             return false;
  550.          }
  551.       }
  552.    }
  553.  
  554.    public boolean setAlwaysThrowErrors(boolean var1) {
  555.       boolean var2 = this.alwaysThrowErrors;
  556.       this.alwaysThrowErrors = var1;
  557.       return var2;
  558.    }
  559.  
  560.    public boolean updateAttributeGroup(AttributeDeclaration.Owner var1, String var2, boolean var3) throws ParserException {
  561.       boolean var4 = true;
  562.       var1.getAttributeGroup().removeAll();
  563.       AttrGroupFactory var5 = new AttrGroupFactory(this, var1.getAttributeGroup());
  564.       String var6 = String.valueOf(String.valueOf(String.valueOf(String.valueOf("<!ATTLIST pe.").concat(String.valueOf(var1.getName()))).concat(String.valueOf(" "))).concat(String.valueOf(var2))).concat(String.valueOf(">"));
  565.  
  566.       try {
  567.          DTDParser var7 = new DTDParser(URI.makeStringURI(var6), var5, true);
  568.          var7.parse();
  569.       } catch (IOException var9) {
  570.          Debug.assert(false, "parser died during constructions");
  571.       }
  572.  
  573.       if (var5.parseErrors.size() > 0) {
  574.          if (var3 || this.alwaysThrowErrors) {
  575.             throw (ParserException)var5.parseErrors.firstElement();
  576.          }
  577.  
  578.          Enumeration var10 = var5.parseErrors.elements();
  579.  
  580.          while(var10.hasMoreElements()) {
  581.             this.dtd.addError((ParserException)var10.nextElement());
  582.          }
  583.  
  584.          var4 = false;
  585.       }
  586.  
  587.       for(FilteredEnumerator var11 = new FilteredEnumerator(var1.getAttributeGroup().getAttributes(false), Class.forName("com.extensibility.xml.AttributeDeclaration")); var11.hasMoreElements(); var4 = true) {
  588.          AttributeDeclaration var8 = (AttributeDeclaration)var11.nextElement();
  589.          ((BaseDeclaration)var8).setURI(var1.getURI());
  590.          var8.setOwner(var1);
  591.          this.dtd.insertDeclaration(var8, (BaseDeclaration)null);
  592.          ++this.insertPosition;
  593.       }
  594.  
  595.       return var4;
  596.    }
  597.  
  598.    public boolean createAttributeGroup(InternalPEDeclaration var1, AttributeDeclaration.Owner var2, boolean var3) throws ParserException {
  599.       AttributeGroup var4 = var1.getAttributeGroup();
  600.       if (var4 != null) {
  601.          if (var2 != null) {
  602.             var2.add(var4);
  603.          }
  604.  
  605.          return true;
  606.       } else {
  607.          AttributeGroup var5 = new AttributeGroup(var1);
  608.          var1.setAttributes(var5);
  609.          boolean var6 = this.updateAttributeGroup(var1, ((EntityDeclaration)var1).getValue(), var3);
  610.          if (!var6) {
  611.             var1.clearAttributes();
  612.          }
  613.  
  614.          if (var2 != null && var6) {
  615.             var2.add(var5);
  616.          }
  617.  
  618.          return var6;
  619.       }
  620.    }
  621.  
  622.    public void changeTerms(int[] var1, char var2) {
  623.       if (!this.insideIgnore) {
  624.          Debug.assert(this.lastModel.isGroup(), "last model must be a group");
  625.          Debug.assert(this.currentModelTerm != null, "currentModelTerm expected to be non-null");
  626.          ContentModelTerm var3 = new ContentModelTerm();
  627.          var3.setConnection(var2);
  628.          var3.setOccurance(var1[0], var1[1]);
  629.          if (this.lastModel != this.currentModelTerm) {
  630.             this.currentModelTerm.subjugateTerm(this.lastModel, var3);
  631.          }
  632.  
  633.       }
  634.    }
  635.  
  636.    public char createContentTerms(String var1, boolean var2, ParserException var3) {
  637.       if (this.insideIgnore) {
  638.          return '\u0000';
  639.       } else {
  640.          ParameterEntityDeclaration var4 = this.dtd.getNamedParameterEntity(var1);
  641.          if (var4 != null && var4 instanceof InternalPEDeclaration) {
  642.             InternalPEDeclaration var5 = (InternalPEDeclaration)var4;
  643.             ContentModel var6 = var5.getContentModel();
  644.             if (var6 == null) {
  645.                var6 = var5.createContentModel();
  646.                String var7 = ((EntityDeclaration)var5).getValue();
  647.                Vector var8 = new Vector();
  648.  
  649.                try {
  650.                   var8 = this.reparseContentModel(var5, var7, var2);
  651.                } catch (ParserException var10) {
  652.                   this.createError(var10.adoptContext(var3));
  653.                }
  654.  
  655.                if (var8 != null && var8.size() > 0) {
  656.                   for(int var9 = 0; var9 < var8.size(); ++var9) {
  657.                      this.createError(((ParserException)var8.elementAt(var9)).adoptContext(var3));
  658.                   }
  659.                }
  660.             }
  661.  
  662.             Debug.assert(this.currentModelTerm != null, "model shouldn't be null ");
  663.             if (var6 != this.currentModelTerm) {
  664.                this.currentModelTerm.addTerm(var6);
  665.             }
  666.  
  667.             this.lastModel = var6;
  668.             return ((ContentModelTerm)var6).getChildConnection();
  669.          } else {
  670.             return '\u0000';
  671.          }
  672.       }
  673.    }
  674.  
  675.    private Vector reparseContentModel(ContentModelOwner var1, String var2, boolean var3) throws ParserException {
  676.       Stack var4 = this.cmStack;
  677.       ContentModelTerm var5 = this.currentModelTerm;
  678.       this.currentModelTerm = var1.getContentModel();
  679.       this.currentModelTerm.updateModelTerm();
  680.  
  681.       ContentTermFactory var6;
  682.       try {
  683.          var6 = new ContentTermFactory(this);
  684.          DTDParser.parseModel(var2, var6, true, var3);
  685.       } finally {
  686.          this.cmStack = var4;
  687.          this.currentModelTerm = var5;
  688.       }
  689.  
  690.       return var6.getParseErrors();
  691.    }
  692.  
  693.    public void checkAttributeGroup(String var1, String var2) throws ParserException {
  694.       InternalPEDeclaration var3 = new InternalPEDeclaration(var1, "#DUMMY#");
  695.       AttributeGroup var4 = new AttributeGroup(var3);
  696.       var3.setAttributes(var4);
  697.  
  698.       try {
  699.          this.updateAttributeGroup(var3, var2, true);
  700.       } finally {
  701.          var4.removeAll();
  702.       }
  703.  
  704.    }
  705.  
  706.    public void checkContentModel(String var1, String var2, boolean var3) throws ParserException {
  707.       InternalPEDeclaration var4 = new InternalPEDeclaration(var1, "#DUMMY#");
  708.       ContentModel var5 = var4.createContentModel();
  709.  
  710.       try {
  711.          this.reparseContentModel(var4, var2, var3);
  712.       } finally {
  713.          ((ContentModelTerm)var5).removeAll();
  714.       }
  715.  
  716.    }
  717.  
  718.    public void updateContentModel(ContentModelOwner var1, String var2, boolean var3) throws ParserException {
  719.       if (DTDParser.isWhiteString(var2)) {
  720.          ContentModel var4 = var1.getContentModel();
  721.          var4.updateContentModelToBlank();
  722.       } else {
  723.          this.reparseContentModel(var1, var2, var3);
  724.       }
  725.    }
  726.  
  727.    public void setEncoding(String var1) {
  728.       if (this.dtd != null) {
  729.          this.dtd.setEncoding(var1);
  730.       }
  731.    }
  732. }
  733.